package com.ruoyi.site.service.impl;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.ruoyi.site.domain.FilterOptions;
import com.ruoyi.site.domain.Genres;
import com.ruoyi.site.domain.Moods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.site.mapper.TracksMapper;
import com.ruoyi.site.domain.Tracks;
import com.ruoyi.site.service.ITracksService;

/**
 * 音乐曲目Service业务层处理
 * 
 * @author chuckeytang
 * @date 2025-08-17
 */
@Service
public class TracksServiceImpl implements ITracksService 
{
    @Autowired
    private TracksMapper tracksMapper;

    /**
     * 查询音乐曲目
     * 
     * @param trackId 音乐曲目主键
     * @return 音乐曲目
     */
    @Override
    public Tracks selectTracksByTrackId(Long trackId)
    {
        return tracksMapper.selectTracksByTrackId(trackId);
    }

    /**
     * 查询音乐曲目列表
     * 
     * @param tracks 音乐曲目
     * @return 音乐曲目
     */
    @Override
    public List<Tracks> selectTracksList(Tracks tracks)
    {
        return tracksMapper.selectTracksList(tracks);
    }

    /**
     * 新增音乐曲目
     * 
     * @param tracks 音乐曲目
     * @return 结果
     */
    @Override
    public int insertTracks(Tracks tracks)
    {
        return tracksMapper.insertTracks(tracks);
    }

    /**
     * 修改音乐曲目
     * 
     * @param tracks 音乐曲目
     * @return 结果
     */
    @Override
    public int updateTracks(Tracks tracks)
    {
        return tracksMapper.updateTracks(tracks);
    }

    /**
     * 批量删除音乐曲目
     * 
     * @param trackIds 需要删除的音乐曲目主键
     * @return 结果
     */
    @Override
    public int deleteTracksByTrackIds(Long[] trackIds)
    {
        return tracksMapper.deleteTracksByTrackIds(trackIds);
    }

    /**
     * 删除音乐曲目信息
     * 
     * @param trackId 音乐曲目主键
     * @return 结果
     */
    @Override
    public int deleteTracksByTrackId(Long trackId)
    {
        return tracksMapper.deleteTracksByTrackId(trackId);
    }

    /**
     * 获取所有可用的筛选器选项
     */
    @Override
    public FilterOptions getFilterOptions() {
        FilterOptions options = new FilterOptions();

        // 1. 获取所有流派
        List<Genres> genres = tracksMapper.selectAllGenresWithCounts();
        options.setGenres(genres);

        // 2. 获取所有情绪
        List<Moods> moods = tracksMapper.selectAllMoodsWithCounts();
        options.setMoods(moods);

        // 3. 获取所有艺术家，并转换为 Map 列表
        List<Tracks> artistsFromDb = tracksMapper.selectAllArtistsWithCounts();
        List<Map<String, Object>> artists = artistsFromDb.stream()
                .map(track -> {
                    Map<String, Object> artistMap = new HashMap<>(); // 使用 HashMap
                    artistMap.put("artist", track.getArtist());
                    artistMap.put("count", track.getCount());
                    return artistMap;
                })
                .collect(Collectors.toList());
        options.setArtists(artists);

        // 4. 获取BPM和持续时间范围（这里可以硬编码或从数据库查询）
        // 这里为了简单，我们硬编码，实际项目中可以根据数据动态计算
        options.setMinBpm(0L);
        options.setMaxBpm(250L);
        options.setMinDuration(0L);
        options.setMaxDuration(600L); // 10分钟

        return options;
    }

    /**
     * 根据 ID 获取标准价格
     */
    @Override
    public BigDecimal getStandardPriceByTrackId(Long trackId) {
        // 直接调用 Mapper 方法
        return tracksMapper.selectStandardPriceByTrackId(trackId);
    }
}
